HTML - Siglas e Termos

Desenvolvimento de Apps

Existem muitas siglas que a gente se depara trabalhando com determinada tecnologia. Sendo assim as mais importantes serão explicadas e as menos significantes serão alvo de pesquisa posterior.

Muitas vezes usamos termos que estamos cansados de usar tão corriqueiramente que esquecemos que quem esta aprendendo pode nunca ter ouvido falar no termo. Portanto, a seguir temos as Siglas e Termos mais comuns para quem trabalha com desenvolvimento web.

Existe alguns termos em desenvolvimento web que as pessoas da área normalmente usam e que uma pessoa leiga ou nova na área terá que fazer muita pesquisa para descobrir e nem sempre estará na linguagem que ela consiga entender.

Contudo dependo do fabricante da linguagem ele poderá usar outro termo para designar os conceitos abaixo mas eles existem em todas as linguagens.

Client-Side e Server-Side

Você se lembra que toda página web é composta pelo menos por 2 agentes : um web-server que publicou a página e o browser do seu micro. É chamada também de 2 tiers ou arquitetura cliente-servidor. Contudo a grande maioria dos sites são 3 tiers porque tem um servidor de banco de dados que tem os dados a serem exibidos na página.

Em web, Client-Side significa que o item abordado funciona do lado do cliente, dentro do browser . Um dos termos mais comuns é 'o javascript' é a linguagem mais utilizada do lado do cliente pois permite a validação de informações ainda no cliente evitando de enviá-las ao servidor e descobrir que falta algo ou tem erro.

Server-Side significa que item abordado funciona do lado do servidor, dentro do web-server . O Caso mais comum é a linguagem ASP NET ou PHP que são linguagens de desenvolvimento de páginas dinâmicas que funcionam dentro do servidor web.

FrontEnd e Backend

Se você faz um site para uma empresa tem pelo menos 3 envolvidos no projeto : 1-Você, o desenvolvedor, 2-O cliente ou empresa que contratou o desenvolvimento do site e 3-O cliente que vai comprar ou interagir com o site.
Sendo assim chamamos de 'frontend' tudo que envolve o atendimento ao cliente.
Chamamos de 'backend' tudo que mantém a empresa funcionando. Controle de estoque, logística pós venda, etc.
Como regra, o frontend é mais bem feito que o backend por ter relação direta com o faturamento da empresa.

Código Fonte ou Source Code

Quando desenvolvemos um programa ou página web desenvolvemos um 'código' para executar alguma tarefa e no 'código' dessa página determinamos o que deve ser exibido ou executado, posição, estilo, etc.
Importante frisar que não obrigatóriamente o código que desenvolvemos é enviado para o usuário (veja Páginas Dinâmicas). Portanto é muito importante que você salve as versões antigas da sua página se quiser, em caso de erro, retornar a anterior. Se o erro foi feito no visual studio você pode ir teclando <control>z que o visual studio vai desfazendo uma por uma das modificações até chegar ao que era originalmente. Contudo se você salvar e sair do Visual studio perderá o histórico de modificações.
Veja TFS e GIT e GITHUB para versionamento das páginas de código do seu projeto.

TAG

Se você conhece bem o Inglês sabe que tag significa berruga ( skin tags ) mas não é bem isso que significa em web.
TAG é um marcador feito com texto simples mas que indica que o elemento não é um texto, pode ser uma imagem, um vídeo, um campo de entrada de texto, etc.
Tecnicamente tudo que não é puro texto que você vê dentro da página HTML está dentro de uma tag HTML.

Acentuação e Idioma

No visual studio e na maioria das ferramentas do windows ao criar uma página nova o conjuntode caracteres padrão será Europeu Ocidental (Windows) - Página de Código 1252 .
Infelizmente o padrão da Internet é Unicode (UTF-8) - Página de Código 65001
Por esse motivo muita acentuação é perdida quando usamos o padrão errado ou quando tentamos exportar informações do windows para a web e vice-versa.
Citando um exemplo, ao pegar um nome de arquivo do sistema operacional(windows) e exibir na web com UTF-8 toda a acentuação dos nomes dos arquivos será perdida. Para corrigir este problema temos de usar um locale para pt-br (em php : utf8_encode('string')).

Container

Dizemos que um elemento é container de outro quando o elemento corrente esta dentro de um outro em nível hierarquico superior (vide DOM), é filho de um elemento pai que abriga diversos um ou mais elementos filhos dentro dele. Citando um exemplo, uma tag div com tags ul ou input dentro para alinhar e modelar sua exibição. Todas as tags dentro da tag div seriam tags filhas e a tag div seria a pai e container de todas as demais dentro dela.
Lembre-se que o container de todas as tags do documento é o elemento BODY.

Tags de Formulário

São tags html que se destinam a armazenar as informações digitadas pelo usuário e que serão enviadas ao servidor futuramente através do botão submit.
Na tag form temos a definição do destino onde os dados devem ser enviados.
Contudo é necessário ter uma 'tecnologia de servidor' no destino dos dados porque é no mecanismo do servidor web que as informações podem ser trocadas. Se você enviar simplemente para uma página de destino os dados serão perdidos.

As tags de formulário mais comuns são form, input type text (acho que todas as tags input), botão tipo submit. Contudo podemos enviar opções em checkboxes, option buttons e podemos enviar informações escondidas, que o usuário não precisa sequer saber que exite com uma tag input tipo hidden.

Produção de Programas

Podemos dividir a produção de programas em duas grandes áreas : O desenvolvimento de aplicações nativas para as plataformas ( a Microsoft chama de Windows Forms ) e as aplicações web ( a Microsoft chama de aplicações web ).

Aplicações nativas da plataforma

Há uns 20 anos atrás era só o que havia mas com o crescimento da Internet a demanda por aplicações web subiu muito e hoje a grande maioria é desenvolvimento web.

O grande mau das aplicações nativas é que muitas delas são casadas com a plataforma, ou seja, se você quer desenvolver para a Microsoft tem que usar as ferramentas da Microsoft, se quiser desenvolver para a Apple tem que conhecer e utilizar as ferramentas da Apple e o mesmo vale para a Google.
Isto criou um seccionamento que muitas vezes empresas tem que ter duas ou tres equipes para desenvoler o mesmo software em plataformas diferentes.

Outra grande desvantagem é que as ferramentas web hoje estão muito mais flexíveis que as nativas porque receberam o foco das atenções por anos e foram feitos muitos melhoramentos na web e poucos nas nativas.

Ferramentas de desenvolvimento

Todos desenvolvedores desenvolvem programas utilizando ferramentas que facilitam o desenvolvimento e aumentam a produtividade. Para isso são criados os ferramentas que atendam a necessidades desses desenvolvedores e, dependendo da sua necessidade, existirá um ferramenta que tem vantagem sobre outras ferramentas para execução das tarefas.

A principal função dessas 'ferramentas' é auxiliar o desenvolvedor a realizar a sua tarefa da melhor maneira possível.

Editores de Texto

Os editores de texto voltados para desenvolvimento possuem algumas facilidade fundamental que é a aplicação de cores para diferenciar partes do programa. Por exemplo:

Os melhores exemplos de editores de texto são o Sublime Text, o ATOM, o Visual Studio Code e muitos outros.
Eles costumam ser leves por serem simples e restritos.

Ambientes Integrado de desenvolvimento (IDE)

A IDE é velha, vem do tempo do Turbo Pascal no DOS mas fez tanto sucesso que até hoje é utilizada.
Além de ser editor de textos permite ainda compilar e executar programas ( na plataforma nativa ), publicar / instalar o programa numa máquina local ou remota na rede ou mesmo publicar diretamente num site web.

Os melhores exemplos são o Eclipse, NetBeans, o Visual Studio Community Edition.
Costumam ser bem mais pesados que os editores de texto mas são muito mais completos como, por exemplo, ao alterar o tipo da tag de abertura automaticamente a IDE altera o tipo da tag de fechamento ou mesmo alertar para um erro de sintaxe no JavaScript, coisa que em outra plataforma de desenvolvimento só seria notada no momento de execução no site.

Fases da montagem do programa

Se você leu o que mencionei acima então sabe que o desenvolvedor desenvolve o programa numa linguagem de alto nível mais amigável que 'mascara' certo grau de complexidade na montagem da aplicação.

Módulos

Todo programa hoje em dia pode ser separado em módulos sendo que cada um desses módulos faz uma tarefa específica como validar um cpf, autenticar o usuário.
O módulo tem a incumbência de tornar uma aplicação complexa como um todo em módulos, pequenos, simples e que executam cada um uma pequena parte dessa atividade e, todos reúnidos, realizam a tarefa solicitada.

Abstração

Abstração é o poder que a linguagem ou o ambiente dá ao programador de maneira simplificar o desenvolvimento da aplicação.

Quando você declara uma variável a inteira o programa aloca ( designa ) uma área de memória, em bytes, capaz de armazenar o valor do tipo da variável e dá a essa 'alocação de memória' o nome a. Assim quando você pede para executar a instrução a=0 o programa vai na região de memória onde a variável foi designada e zera seu valor. Parece uma coisa tola e boba mas é fundamental para facilitar a vida do programador.

Outra coisa que a abstração permite é a utilização de recursos sem a necessidade de compreendê-los em detalhes. Por exemplo, numa aplicação Android eu posso pedir a uma funcionalidade para bater uma foto sem me preocupar qual será a sua resolução ou como será feito em detalhes. O programa simplesmente retornará a foto esta na pasta x ou não foi tirada a foto.

Classes

Na grande maioria das linguagens Classes são como 'receitas de bolo', ou seja, explicam como fazer uma coisa mas a coisa em sí realmente ainda não existe, é só um método ou modelo de 'como fazer a coisa'. Portanto, classe seria a 'receita de bolo' que em momento nenhum é o bolo. O bolo seria a realização da receita ou, em nosso caso, da classe tornada real fisicamente.

Explicando um pouco melhor numa classe nós podemos dizer que existe uma variável a e ela é do tipo inteira só que numa classe existe a definição mas ainda não existe na memória do computador para que este possa fazer cálculos, por exemplo.

Instanciamento

No instânciamento carregamos uma classe para a memória do computador. Aí dizemos que os elementos da classe realmente existem mas técnicamente ainda não foram inicializados, ou seja, como no exemplo mencionado acima a variavel inteira a foi criada na memória mas qual é o seu valor ? Se o sistema ao carregar a variável não colocou um valor default esta variável terá o valor que estava na memória no momento que foi reservado o espaço da memória para aquela variável, portanto ela terá um valor qualquer.
Uma das palavras chaves para instanciar uma classe é a palavra new.

Diferença entre a definição da classe e seu instanciamento

Como disse acima na definição da classe temos a 'receita do bolo' o que nada mais é que uma maneira de se criar o bolo mas NÃO É O BOLO EM Sí.
Exemplo : Classe 'meuBoloPredileto'

Contudo no instanciamento trazemos a classe e seus elementos para a memória e com isto o 'bolo' que antes era uma simples receita passa a ser um 'bolo' real, ou seja, o que antes era uma mera descrição falando que existia uma variável a inteira agora é uma área de memória que se atribuiu a variável a e com isto podemos fazer operações e cálculos com ela.

Construtor

O Construtor normalmente é um método que é chamado assim que a classe é carregada para a memória para inicializar seus elemento. Portanto se quero definir que o string nome tem o valor 'Carlos' logo após a carga da classe pelo sistema seria chamado o método construtor que faria esta atribuição.
Em muitos dos sistemas o método construtor é chamado automaticamente, portanto na própria classe definimos o método construtor que será executado assim que a classe for carrgada.

Interface

Suponha que uma parte I do programa carregue a Classe A...ai suponha que a Classe II carregue também a classe A...o que vai acontecer ? Quando o programa for compilado ( convertido para o código que a máquina sabe executar ) vai dar um erro de dupla definição da Classe A porque se foi carregado o mesmo objeto duas vezes qual deles deve ser usado ?

Em todas as linguagens a definição de um item tem que ser único ou ter uma assinatura que diferencie ele de outro. Por exemplo, poderiamos ter uma variavel a inteira e outra variavel a string e ao atribuir o valor 4 a variável a o programa saberia, automaticamente, que como o valor atribuído é inteiro deverá ser utilizada a variável a inteira e não a string.
Isso nem sempre é possível com variáveis mas com funções, por exemplo, é possível.

A Interface informa que existe o elemento mas define ele como externo, ou seja, será definido em outra parte do programa a ser compilado. Portanto, diversos módulos poderiam usar a classe A informada pela interface mas só um módulo faria a inclusão da classe A fora do módulo pois esta seria a que faria todas as definições em detalhes.

Citando um exemplo, numa interface teriamos a definição de uma variável a inteira mas nessa definição da interface ela seria definida como external, ou seja, a interface informa o nome e o tipo da variável e define que alguém futuramente definirá mais algum detalhe sobre ela. Para o módulo que esta compilando sabendo o nome e o tipo da variável é o suficiente para prosseguir na compilação e será deixado para no final da montagem do programa compilado (linkagem) juntar todas as partes do programa e verificar se esta tudo certo.

Lógicamente podemos ter conflito entre a classe e a interface. A classe pode dizer que a variável a é inteira e a interface dizer que a variável a é string.

Passagem de parâmetros

Na maioria das linguagem a passagem de parâmetros se dá ou por valor (ByVal) ou por referência (ByRef).

ByVal ( Por valor )

Como o próprio termo diz, a passagem do parâmetro se dá por valor, ou seja, os valor da variável em sí é passado.
Sendo assim se eu informar var a : integer = 20; e chamar a funcaox(a); Na chamada da funcaox estarei passando o valor da variável a.
Na funcaox se eu só quiser utilizar o valor sem problemas. Mas se eu precisar fazer com que na funcaox o valor vá de 0 até o valor de a eu preciso criar outra variável para permitir essa 'alteração de valor'. Então eu crio e passo o valor do parâmetro para uma variável e utilizo a variável local criada e não o parâmetro recebido.
Outra problemas com a passagem de parâmetros por valor é que você não pode alterar o valor do parâmetro na função chamadora, ou seja, se eu fizer na funcaox a=a+1 ( se a linguagem permitir ) a funcao x até pode utilizar esse novo valor mas com certeza a função chamadora não irá receber o valor da variável a alterado da funcaox porque passou apenas seu valor.

Na maioria das linguagens as variáveis que ocupam poucos bytes são passadas por valor, como as variáveis inteiras, por exemplo.

ByRef ( Pela Referência )

Neste caso é passado um ponteiro apontando para região de memória onde a variável foi armazenada.
Sendo assim a função chamada não precisa criar uma nova variável se precisar alterar seu valor e se alterar o seu valor a função chamadora também terá o valor da variável alterada no sistema.

Na maioria das linguagens as variáveis que ocupam muitos bytes são passadas por referencia já que o simples fato de copiar seria um custo em processamento e em memória. As variáveis tipo string e arrays são normalmente passados por referência.